This section explains the design choices that were made during the last part of the project.

\subsubsection{Use of a separate class hierarchy for TOOL}

The separation between the two class hierarchy had several motivations.
First, it just makes TOOL's design simpler and more elegant. If we had to take all Java exceptions into account, we would have two choices : either rely on the programmer to use correct exception names, or make a list of all the exceptions that can be used in Java. 
The first solution wasn't acceptable, since an invalid code could be compiled without any problem.
The second solution would have made \textsf{\small InitialGlobalScope} much bigger. 

The simplest alternative was thus to give the programmer a simple way to create his own exception hierarchy.
This allowed us to keep the compiler sound and to keep the number of changes relatively small.

\subsubsection{Empty \textsf{\small try} and \textsf{\small finally}}

Empty \textsf{\small try} and \textsf{\small finally} are prohibited for the sake of simplicity.
It's indeed quite non-sensical to have an empty \textsf{\small try}, since no exception can be raised inside an empty statement.
It is the same argument for empty \textsf{\small finally} : why write a \textsf{\small finally} if it doesn't do anything?
Empty \textsf{\small catch} however, while considered as bad practice, can be useful to prevent the program from crashing.
